import frappe

def warehouse_naming(doc, method):
    """
    为仓库生成一个唯一的编号。如果该仓库有父仓库，则基于父仓库的编号和流水号生成子仓库编号。
    
    :param doc: 被创建或更新的仓库对象
    :param method: 被触发的钩子方法（如 'before_insert' 或 'before_save'）
    """
    try:
        # 如果当前仓库有父仓库
        if doc.parent_warehouse:
            parent_warehouse = frappe.get_doc('Warehouse', doc.parent_warehouse)
            
            # 获取父仓库的 name 字段
            parent_inventory_code = parent_warehouse.name 
            
            # 父仓库的流水号
            custom_counter = parent_warehouse.custom_counter + 1
            
            # 流水号位数
            custom_prefix_digits = parent_warehouse.custom_prefix_digits  
            
            # 生成新的子仓库编号：父仓库编号 + '.' + 流水号
            new_code = f"{parent_inventory_code}.{str(custom_counter).zfill(custom_prefix_digits)}"
            # frappe.msgprint(f"当前仓库对象: {doc.as_dict()}")
            # frappe.msgprint(f"为仓库 {doc.name} 成功生成编号 {new_code}.")
            # 设置当前仓库的编号
            doc.name = new_code
            # doc.set_value("name", new_code)
            doc.warehouse_name = new_code
            # doc.save()
            # doc.set_value("name", new_code)
            
            parent_warehouse.custom_counter += 1  # 更新父仓库的流水号
            parent_warehouse.save()  # 保存父仓库
            # frappe.msgprint(f"为仓库 {doc.name} 成功生成编号 {new_code}.")

    except Exception as e:
        frappe.throw(f"生成仓库编号时发生错误: {str(e)}")
